﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

#define ADD(x,y) x+y 

inline int add(int x, int y) {
	return x + y;
}

// 内联函数就是在普通函数前面加上inline 
// 宏的好处是执行速度快，但是也有缺点，比如ADD(1, 2) * 2，宏替换完是x+y*2，而不是(x+y)*2
// 内联函数具有宏函数的执行速度，但没有宏函数的缺点，编译器在编译期间会按照一定的规则将普通函数优化为内联函数 
/*
什么情况不会成为内联函数：
  1.存在过多的条件判断语句；
  2.函数体过大；
  3.对函数进行取址操作。
内联函数的好处：
  1.有宏函数的效率，没有宏函数的缺点；
  2.类的成员函数默认加上inline。
*/

int main()
{
	int a = ADD(1, 2) * 2;
	int b = add(1, 2) * 2;
	cout << "ADD(1, 2) * 2=" << a << endl;
	cout << "add(1, 2) * 2=" << b << endl;

	system("pause");
	return EXIT_SUCCESS;
}